
var widget = widget || {};
/**
 * Это класс виджета кнопки.
 * Copyright 2012, Alexander Dashkovsky
 * License: http://www.opensource.org/licenses/mit-license.php
 * @lends widget.Button
 */
widget.ActiveLink = Base.extend({

	/** @const */
	WIDGET_CLASS : 'wg_alink',
	
	text : undefined,
	
	
	constructor : function(config) {
		this.config = config || {} ;
		this.text = this.config.text;
		if (this.config.renderTo) {
			this.render(this.config.renderTo);
		}
	},
	
	/**
	 * Выполняется отрисовка кнопки.
     * @public 
	 * @function
     * @memberOf widget.Button#
	 * @param {elementDOM} renderTo Элемент DOM, внутри которого будет 
	 * создана кнопка.
	 * Если этот параметр не задавать, а поле уже ранее прорисовывалось, то оно 
	 * будет перерисоваться в тот же контейнер. Если в контейнере существуют и 
	 * другие виджеты, render() без параметра прорисует этот виджет после всех 
	 * остальных.
	 * @return none
	 */
	render : function(renderTo) {
		var me = this;
		if (this.element) {
			this.element.remove();
		}

		if (renderTo) {
			this.renderContainer = renderTo;
		} else {
			renderTo = this.renderContainer;
		}

		var tpl = '';
		if (this.config.text) {
			tpl += "<p class='activeLink'> <a href='javascript: return false;'>"+this.config.text+"</a><br>";
		} 
		if (this.element) {
			this.element.remove();
		}
		this.element = $(tpl);
		
	
		
		if (renderTo) {
			$(this.element).appendTo(renderTo);		
                        
			$(this.element).click(function(event) {
				me.onClick(event);
				event.preventDefault();
				return false;
			});
			this.onAfterRender();
		}
	},
	
	/**
	 * Функция добавляет класс(классы) к элементу.
     * @function
     * @private 
	 */
	applyClassToElement : function(cls, element) {
		if (cls) {
			var arr = cls.split(' ');
			for (var i=0; i<arr.length; i++) {
				$(element).addClass(arr[i]);
			}
		}
	},
	
	/**
	 * Функция отрабатывает сразу после прорисовки конпонента. 
     * @private 
	 * @function
	 */
	onAfterRender : function() {
		if (this.config.listeners && this.config.listeners.afterrender) {
			this.config.listeners.afterrender(this, this.element);
		}
	},
	
	/**
	 * Функция отрабатывает сразу после клика мышки на компоненте. 
     * @private 
	 * @function
	 */
	onClick : function(event) {
		if (this.config.listeners && this.config.listeners.click) {
			this.config.listeners.click(this, this.element, event);
		}
		//(window.event) ? event.cancelBubble = true : event.stopPropagation();
	},
	
	/**
	 * Спрятать кнопку. 
     * @public 
	 * @function
     * @memberOf widget.Button#
	 */
	hide : function() {
		var oldVisible = this.visible; 
		this.visible = false;
		if (this.visible != oldVisible) {
			this.element.addClass("hidden");
			this.onHide();
		}
	},
	
	/**
	 * Показать кнопку. 
     * @public 
	 * @function
     * @memberOf widget.Button#
	 */
	show : function() {
		var oldVisible = this.visible; 
		this.visible = true;
		if (this.visible != oldVisible) {
			this.element.removeClass("hidden");
			this.onShow();
		}
	},
	
	/**
	 * Функция отрабатывает после того, как элемент будет спрятан. 
     * @private 
	 * @function
	 */
	onHide : function() {
		if (this.config.listeners && this.config.listeners.hide) {
			this.config.listeners.hide(this, this.element);
		}
	},
	
	/**
	 * Функция отрабатывает после того, как элемент будет показан. 
     * @private 
	 * @function
	 */
	onShow : function() {
		if (this.config.listeners && this.config.listeners.show) {
			this.config.listeners.show(this, this.element);
		}
	},
	
	/**
	 * Возвращает текст на кнопке 
     * @public 
	 * @function
     * @memberOf widget.Button#
	 */
	getText : function() {
		return this.text; 
	},
	
	/**
	 * Устанавливает текст на кнопке 
     * @public 
	 * @function
     * @memberOf widget.Button#
     * @param {String} str Новый текст на кнопке.
	 */
	setText : function(str) {
		this.text = str; 
	},
	


	/**
	 * Возвращает элемент DOM, принадлежащий контейнеру компонента
	 * @public 
	 * @function
     * @memberOf widget.Button#
	 */
	getRenderContainer : function() {
		return this.renderContainer;
	}

});
